package com.opencore.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

import com.opencore.dto.DteEstadoDTO;
import com.opencore.util.ConexionSQL;

public class DteEstadoDao {
	private static PreparedStatement ps = null;
	private static ResultSet rs = null;
	private static Connection con = null;


	public static List<DteEstadoDTO> getAll() throws SQLException, ClassNotFoundException{
		con = ConexionSQL.crearConeccionSQL();
		List<DteEstadoDTO>  archivos = new ArrayList<DteEstadoDTO>();
		try {
			ps = con.prepareStatement("Select ID_ESTADO, ESTADO, DESCRIPCION, FECHA, DTE_DOCUMENTO_ID_DTE_DOCUMENTO FROM DTE_ESTADO");
			rs = ps.executeQuery();

			while(rs.next()) {
				DteEstadoDTO linea = new DteEstadoDTO();
				linea.setIdEstado(rs.getInt("ID_ESTADO"));
				linea.setEstado(rs.getInt("ESTADO"));
				linea.setDescripcion(rs.getString("DESCRIPCION"));
				linea.setFecha(rs.getString("FECHA"));
				linea.setIdDteDocument(rs.getInt("DTE_DOCUMENTO_ID_DTE_DOCUMENTO"));
				archivos.add(linea);
			}			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs != null)
				rs.close();
			if(ps != null)
				ps.close();
			ConexionSQL.cierraConeccion();
		}
		return archivos;
	}

	public List getAllByIdDoc(int idLectura) throws SQLException, ClassNotFoundException{
		con = ConexionSQL.crearConeccionSQL();		
		List estadosList = new ArrayList();
		try {
			ps = con.prepareStatement("Select ID_ESTADO, ESTADO, DESCRIPCION, FECHA FROM DTE_ESTADO where DTE_DOCUMENTO_ID_DTE_DOCUMENTO  ="+idLectura);
			rs = ps.executeQuery();
			while(rs.next()) {
				DteEstadoDTO estado = new DteEstadoDTO();
				estado.setIdEstado(rs.getInt("ID_ESTADO"));
				estado.setEstado(rs.getInt("ESTADO"));
				estado.setDescripcion(rs.getString("DESCRIPCION"));
				estado.setFecha(rs.getString("FECHA"));
				estadosList.add(estado);
			}			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs != null)
				rs.close();
			if(ps != null)
				ps.close();
			ConexionSQL.cierraConeccion();
		}
		return estadosList;
	}



	public static boolean insert(DteEstadoDTO dteEstado) throws Exception{
		boolean exito = false;
		try {
			con = ConexionSQL.crearConeccionSQL();
			int correlativo = ConexionSQL.getLastRow("ID_ESTADO", "DTE_ESTADO");

			StringBuilder insert = new StringBuilder();
			insert.append("insert into DTE_ESTADO (ID_ESTADO, ESTADO, DESCRIPCION, FECHA, DTE_DOCUMENTO_ID_DTE_DOCUMENTO) values (?,?,?,?,?)");
			ps = con.prepareStatement(insert.toString());

			ps.setInt(1, correlativo);
			ps.setInt(2, dteEstado.getEstado());
			ps.setString(3, dteEstado.getDescripcion());
			ps.setTimestamp(4, new Timestamp(System.currentTimeMillis()));
			ps.setInt(5, dteEstado.getIdDteDocument());
			ps.executeUpdate();
			exito = true;
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs != null)
				rs.close();
			if(ps != null)
				ps.close();
			ConexionSQL.cierraConeccion();
		}
		return exito;
	}

	public static boolean update(DteEstadoDTO archivo) throws Exception{
		boolean exito = false;
		try {
			con = ConexionSQL.crearConeccionSQL();
			StringBuilder update = new StringBuilder();
			update.append("update DTE_ESTADO set ESTADO = ?, DESCRIPCION = ?, FECHA = ?, DTE_DOCUMENTO_ID_DTE_DOCUMENTO = ? where ID_ESTADO="+archivo.getIdEstado());
			ps = con.prepareStatement(update.toString());

			ps.setInt(1, archivo.getEstado());
			ps.setString(2, archivo.getDescripcion());
			ps.setTimestamp(3, new Timestamp(System.currentTimeMillis()));
			ps.setInt(4, archivo.getIdDteDocument());
			ps.executeUpdate();

			exito = true;
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs != null)
				rs.close();
			if(ps != null)
				ps.close();
			ConexionSQL.cierraConeccion();
		}
		return exito;
	}

	public static boolean updateEstadoDoc(DteEstadoDTO archivo) throws Exception{
		boolean exito = false;
		try {
			con = ConexionSQL.crearConeccionSQL();
			StringBuilder update = new StringBuilder();
			update.append("update DTE_DOCUMENTO set estado_ultimo = ? where ID_DTE_DOCUMENTO ="+archivo.getIdDteDocument());
			ps = con.prepareStatement(update.toString());

			ps.setInt(1, archivo.getEstado());
			ps.executeUpdate();

			exito = true;
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs != null)
				rs.close();
			if(ps != null)
				ps.close();
			ConexionSQL.cierraConeccion();
		}
		return exito;
	}
	
	//	//main para pruebas unitarias
	//		public static void main(String[] args) throws Exception {
	//	
	//			try {
	//			//get all
	//			List<DteEstadoDTO> dteLectura = getAll();
	//			for (DteEstadoDTO dteLect : dteLectura) {
	//				System.out.println(dteLect.toString());
	//			}
	//
	//			//get all by id
	//			DteEstadoDTO dteLectura2 = getAllById(1);
	//			System.out.println(dteLectura2.toString());
	//
	//				//insert
	//				DteEstadoDTO linea = new DteEstadoDTO();
	//				linea.setEstado(1);
	//				linea.setDescripcion("soy un estado de prueba");
	//				linea.setIdDteDocument(1);
	//				System.out.println(insert(linea));
	//	
	//				//update
	//				DteEstadoDTO linea2 = new DteEstadoDTO();
	//				linea2.setIdEstado(1);
	//				linea2.setEstado(1);
	//				linea2.setDescripcion("soy un estado de prueba modificado");
	//				linea2.setIdDteDocument(1);
	//				System.out.println(update(linea2));
	//	
	//			} catch (ClassNotFoundException e) {
	//				e.printStackTrace();
	//			} catch (SQLException e) {
	//				e.printStackTrace();
	//			}
	//		}
}
